//key.c
#include "key.h"

void KEY_Init(void)
{
	GPIO_InitTypeDef GPIO_Config;
	GPIO_InitTypeDef GPIO_Config1;
	//ʹ��ʱ��
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
	//����
	GPIO_Config.GPIO_Pin = GPIO_Pin_0;
	GPIO_Config.GPIO_Mode = GPIO_Mode_IPD; //��������
	GPIO_Init(GPIOA,&GPIO_Config);
	GPIO_Config1.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
	GPIO_Config1.GPIO_Mode = GPIO_Mode_IPU; //��������
	GPIO_Init(GPIOE,&GPIO_Config1);
}
u32 KEY_Scan(void)
{
	static u32 ispressed = 0;
	if((KEY_UP == 1 || KEY0 == 0 || KEY1 ==0 || KEY2 == 0) && (ispressed == 0))
	{
		Delay_ms(10);//����ȥ����
		ispressed = 1;
		if(KEY_UP == 1)
			return KEY_UP_VAL;
		else if(KEY0 == 0)
			return KEY0_VAL;
		else if(KEY1 == 0)
			return KEY1_VAL;
		else if(KEY2 == 0)
			return KEY2_VAL;
	}
	else if(KEY_UP == 0 && KEY0 == 1 && KEY1 == 1 && KEY2 == 1)
	{
		ispressed = 0;
	}
	return 0;
}
/*
�ú��������ã�
1.KEY_UP���������ã�����BEEP��
2.KEY0:����BEEP����
3.KEY1������LED0
4.KEY2������LED1
*/
void KEY_Project(void)
{
	u32 key = KEY_Scan();
	switch(key)
	{
		case KEY_UP_VAL:BEEP = 1;break;
		case KEY0_VAL:BEEP = 0;break;
		case KEY1_VAL:LED0 = !LED0;break;
		case KEY2_VAL:LED1 = !LED1;break;
	}
}





